import axios, { AxiosRequestConfig, AxiosResponse, AxiosError } from "axios";
import { Toast } from "vant";

// 创建一个 axios 实例
const http = axios.create({
  baseURL: "/dapp",
  timeout: 5000,
  headers: {
    // 告诉服务器前端发送的数据是json格式
    "Content-Type": "application/json",
  },
});

// 请求拦截器
http.interceptors.request.use(
  (config: AxiosRequestConfig) => {
    // 从本地存储获取 token
    const token = sessionStorage.getItem("token");

    // 需要 token 的请求，动态添加 Authorization 头部
    if (token) {
      // 如果存在 token，则添加到请求头中
      config.headers!["token"] = token; // 使用非空断言 `!` 确保 headers 不为 null 或 undefined
    }
    // Toast.loading({
    //   message: "加载中...", // 设置加载提示文本
    //   forbidClick: true, // 设置是否禁用点击
    //   duration: 100, // 设置持续时间，0 表示不自动关闭
    // });
    // 若返回的状态码为 401，跳转到登录页
    return config;
  },
  (error: AxiosError) => {
    // 请求错误时做点什么
    return Promise.reject(error);
  }
);

// 响应拦截器
http.interceptors.response.use(
  (response: AxiosResponse) => {
    // 对响应数据做点什么
    return response.data;
  },
  (error: AxiosError) => {
    // 响应错误时做点什么
    if (import.meta.env.VUE_APP_MODE === "development") {
      console.error("响应错误:", error);
      // Toast.clear(); // 清除加载提示
    }

    // 可以在这里做错误提示，弹出消息等
    // Toast.fail('请求失败，请稍后重试');

    return Promise.reject(error);
  }
);

export default http;
